package tests.informe;

import org.junit.Test;

import utils.CustomRandom;
import utils.UI.JFreeChart.Tp4Header;
import AlgoritmosGeneticos.model.AlgoritmoGenetico;
import AlgoritmosGeneticos.model.impl.AlgoritmoGeneticoImpl;
import AlgoritmosGeneticos.model.impl.corte.CorteEntornoOptimo;
import AlgoritmosGeneticos.model.impl.cruces.CruceAnular;
import AlgoritmosGeneticos.model.impl.cruces.CruceMultiple;
import AlgoritmosGeneticos.model.impl.cruces.CruceSegmentado;
import AlgoritmosGeneticos.model.impl.cruces.CruceSimple;
import AlgoritmosGeneticos.model.impl.mutuaciones.MutacionBasica;
import AlgoritmosGeneticos.model.impl.selecciones.Elite;
import AlgoritmosGeneticos.model.impl.selecciones.MixtoEliteRuleta;
import AlgoritmosGeneticos.model.impl.selecciones.MixtoEliteUniversal;
import AlgoritmosGeneticos.model.impl.selecciones.Ruleta;
import AlgoritmosGeneticos.model.impl.selecciones.Torneos;
import AlgoritmosGeneticos.model.impl.selecciones.Universal;

public class TestMinimo2 {

	CustomRandom cr=new CustomRandom(1);
	private final int POP_SIZE= 200;
	private final int K= 20;
	private final double P_MUT= 0.01f;
	
	@Test
	public void cruceSimple() throws InterruptedException{
		
		System.out.println("Test 1 >> ");
		
		AlgoritmoGeneticoImpl ag= new AlgoritmoGeneticoImpl(POP_SIZE,K,P_MUT);
		System.out.print("Estrategia de cruce: ");
		ag.setOpCru			(new CruceSimple());
		System.out.print("Estrategia de mutacion: ");
		ag.setOpMut			(new MutacionBasica());
		System.out.print("Estrategia de seleccion: ");
		ag.seteSeleccion	(new Elite());
		System.out.print("Estrategia de reemplazo: ");
		ag.seteReemplazo	(new Elite());
		System.out.print("Estrategia de corte: ");
		ag.setMaxIterations		(200);	
		ag.setCondicion		(new CorteEntornoOptimo(3.37264781546285, 0.0001));
		ag.setHeaders		(new Tp4Header());
		ag.setSeePlot		(false);
		ag.setFitness			(AlgoritmoGenetico.fitness.MINIMO);

		System.out.println("------EVOLUCIONANDO POBLACION----------");
		ag.evolucionaPoblacion	();	
		System.out.println();
	}
	
	@Test
	public void cruceMultiple() throws InterruptedException{
		
		System.out.println("Test 2 >> ");
		
		AlgoritmoGeneticoImpl ag= new AlgoritmoGeneticoImpl(POP_SIZE,K,P_MUT);
		System.out.print("Estrategia de cruce: ");
		ag.setOpCru			(new CruceMultiple());
		System.out.print("Estrategia de mutacion: ");
		ag.setOpMut			(new MutacionBasica());
		System.out.print("Estrategia de seleccion: ");
		ag.seteSeleccion	(new Elite());
		System.out.print("Estrategia de reemplazo: ");
		ag.seteReemplazo	(new Elite());
		System.out.print("Estrategia de corte: ");
		ag.setMaxIterations		(200);
		ag.setCondicion		(new CorteEntornoOptimo(3.37264781546285, 0.0001));
		ag.setHeaders		(new Tp4Header());
		ag.setSeePlot		(false);
		
		ag.setFitness			(AlgoritmoGenetico.fitness.MINIMO);
		System.out.println("------EVOLUCIONANDO POBLACION----------");
		ag.evolucionaPoblacion	();	
		System.out.println();
	}
	
	@Test
	public void cruceSegmentado() throws InterruptedException{
		
		System.out.println("Test 3 >> ");
		
		AlgoritmoGeneticoImpl ag= new AlgoritmoGeneticoImpl(POP_SIZE,K,P_MUT);
		System.out.print("Estrategia de cruce: ");
		ag.setOpCru			(new CruceSegmentado());
		System.out.print("Estrategia de mutacion: ");
		ag.setOpMut			(new MutacionBasica());
		System.out.print("Estrategia de seleccion: ");
		ag.seteSeleccion	(new Elite());
		System.out.print("Estrategia de reemplazo: ");
		ag.seteReemplazo	(new Elite());
		System.out.print("Estrategia de corte: ");
		ag.setMaxIterations		(200);
		ag.setCondicion		(new CorteEntornoOptimo(3.37264781546285, 0.0001));
		ag.setHeaders		(new Tp4Header());
		ag.setSeePlot		(false);
		
		ag.setFitness			(AlgoritmoGenetico.fitness.MINIMO);
		System.out.println("------EVOLUCIONANDO POBLACION----------");
		ag.evolucionaPoblacion	();	
		System.out.println();
	}
	
	@Test
	public void cruceAnular() throws InterruptedException{
		
		System.out.println("Test 4 >> ");
		
		AlgoritmoGeneticoImpl ag= new AlgoritmoGeneticoImpl(POP_SIZE,K,P_MUT);
		System.out.print("Estrategia de cruce: ");
		ag.setOpCru			(new CruceAnular());
		System.out.print("Estrategia de mutacion: ");
		ag.setOpMut			(new MutacionBasica());
		System.out.print("Estrategia de seleccion: ");
		ag.seteSeleccion	(new Elite());
		System.out.print("Estrategia de reemplazo: ");
		ag.seteReemplazo	(new Elite());
		System.out.print("Estrategia de corte: ");
		ag.setMaxIterations		(200);
		ag.setCondicion		(new CorteEntornoOptimo(3.37264781546285, 0.0001));
		ag.setHeaders		(new Tp4Header());
		ag.setSeePlot		(false);
		
		ag.setFitness			(AlgoritmoGenetico.fitness.MINIMO);
		System.out.println("------EVOLUCIONANDO POBLACION----------");
		ag.evolucionaPoblacion	();	
		System.out.println();
	}
}
